package negocios;

import java.util.ArrayList;

public class Desafio extends ModoDeJogo
{
	/* Definição dos atributos da classe */

	// tempo limite do jogo para o modo Desafio
	private int tempo;
	// ´pontuação obtida pelo jogador durante o modo Desafio
	private int pontuacao;
	// índice que divide os níveis dos verbos fácil do médio
	private int limite1;
	// índice que divide os níveis dos verbos médio do difícil
	private int limite2;
	// verbo para exibição complementar exclusivo para o modo Desafio
	private FormaVerbal verboErrado3;
	// histórico de respostas do jogador
	protected ArrayList<Resposta> listaDeRespostas;

	/* Definição do construtor */

	public Desafio()
	{
		this.tempo = 60;
		this.pontuacao = 0;
		this.limite1 = 0;
		this.limite2 = 0;
		this.verboErrado3 = new FormaVerbal();
		this.listaDeRespostas = new ArrayList<Resposta>();
	}

	public Desafio(int tempo, int pontuacao, int limite1, int limite2)
	{
		if (isPositivo(tempo))
		{
			this.tempo = tempo;
		}
		if (isPositivo(pontuacao))
		{
			this.pontuacao = pontuacao;
		}
		this.limite1 = limite1;
		this.limite2 = limite2;
		this.verboErrado3 = new FormaVerbal();
	}

	/* Definição dos métodos */

	// Início da declaração dos 'Getters' e 'Setters'
	public int getTempo()
	{
		return tempo;
	}

	public void setTempo(int tempo)
	{
		if (tempo >= 0)
		{
			this.tempo = tempo;
		}
	}

	public void decrementarTempo()
	{
		if (this.tempo > 0)
		{
			this.tempo--;
		}
	}

	public int getPontuacao()
	{
		return pontuacao;
	}

	public void setPontuacao(int pontuacao)
	{
		this.pontuacao = pontuacao;
	}

	public int getLimite1()
	{
		return limite1;
	}

	public void setLimite1(int limite1)
	{
		this.limite1 = limite1;
	}

	public int getLimite2()
	{
		return limite2;
	}

	public void setLimite2(int limite2)
	{
		this.limite2 = limite2;
	}

	public FormaVerbal getVerboErrado3()
	{
		return verboErrado3;
	}

	public boolean isPositivo(int valor)
	{
		if (valor >= 0)
		{
			return true;
		}
		return false;
	}

	// Fim da declaração dos 'Getters' e 'Setters'

	public ArrayList<Resposta> getListaDeRespostas()
	{
		return this.listaDeRespostas;
	}

	public void adicionarResposta(Resposta resposta)
	{
		this.listaDeRespostas.add(resposta);
	}

	// nesta caso o metodo adiciona a lista de resposta, para depois compararmos
	public void confirmarJogada(String infinitive, String simple,
			String participle)
	{
		FormaVerbal formaVerbal = new FormaVerbal(infinitive, simple,
				participle);
		Resposta resposta = new Resposta(super.verboCerto, formaVerbal);
		listaDeRespostas.add(resposta);
	}

	public void proximaJogada()
	{
		int indice;
		super.gerenciadorDeSorteio.limparJaSorteados();
		
		do
		{
			indice = super.gerenciadorDeSorteio.gerarIndice(0, limite1);
		} while (super.gerenciadorDeSorteio.verificarOcorrencia(indice));
		
		super.gerenciadorDeSorteio.adicionarIndice(indice);
		
		do
		{
			indice = super.gerenciadorDeSorteio.gerarIndice(limite1, limite2);
		} while (super.gerenciadorDeSorteio.verificarOcorrencia(indice));
		
		super.gerenciadorDeSorteio.adicionarIndice(indice);
		
		do
		{
			indice = super.gerenciadorDeSorteio.gerarIndice(limite2,
					gerenciadorDeVerbos.tamanhoArray());
		} while (super.gerenciadorDeSorteio.verificarOcorrencia(indice));
		
		super.gerenciadorDeSorteio.adicionarIndice(indice);
		
		do
		{
			indice = super.gerenciadorDeSorteio.gerarIndice(limite2,
					gerenciadorDeVerbos.tamanhoArray());
		} while (super.gerenciadorDeSorteio.verificarOcorrencia(indice));
		
		super.gerenciadorDeSorteio.adicionarIndice(indice);
		super.gerenciadorDeSorteio.embaralharArray();
		
		ArrayList<Integer> jaSorteados = super.gerenciadorDeSorteio.getJaSorteados();
		super.verboCerto = super.gerenciadorDeVerbos.retornarElemento(jaSorteados.get(0));
		super.verboErrado1 = super.gerenciadorDeVerbos.retornarElemento(jaSorteados.get(1));
		super.verboErrado2 = super.gerenciadorDeVerbos.retornarElemento(jaSorteados.get(2));
		this.verboErrado3 = super.gerenciadorDeVerbos.retornarElemento(jaSorteados.get(3));
	}
	
	public int quantidadeDeRespostas()
	{
		return this.listaDeRespostas.size();
	}
	
	public void limparListaDeResposta()
	{
		this.listaDeRespostas.clear();
	}
}
